/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.comeval.vista;

import com.comeval.logica.LogicaEntradaLocal;
import com.comeval.logica.LogicaLaboratorioLocal;
import com.comeval.modelo.Entrada;
import com.comeval.modelo.Laboratorio;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author LUISA
 */
@ManagedBean(name="entradaVista")
@RequestScoped
public class EntradaVista {

    @EJB
    private LogicaEntradaLocal entradaLogica;
    
    @EJB
    private LogicaLaboratorioLocal laboratorioLogica;
    
    private InputText txtProductoEntrada;
    private SelectOneMenu cmbPresentacionEntrada;
    private InputText txtContenidoEntrada;
    private SelectOneMenu cmbLaboratorio;
    private InputText txtLoteEntrada;
    private Calendar txtFechaVencimiento;
    private InputText txtUnidades;
    private InputText txtPrecioTulua;
    private InputText txtPrecioAsesores;
    private InputText txtPrecioFarmacias;
    private InputText txtPrecioClientes;
    private InputText txtCostoProducto;
    private Long claveProducto;
    
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;
    
    private List<Entrada> listaEntrada;
    private ArrayList<SelectItem> itemsLaboratorio=null;
    private Entrada selectedEntrada;
    
    
    public EntradaVista() {
    }

    public LogicaEntradaLocal getEntradaLogica() {
        return entradaLogica;
    }

    public void setEntradaLogica(LogicaEntradaLocal entradaLogica) {
        this.entradaLogica = entradaLogica;
    }

    public InputText getTxtProductoEntrada() {
        return txtProductoEntrada;
    }

    public void setTxtProductoEntrada(InputText txtProductoEntrada) {
        this.txtProductoEntrada = txtProductoEntrada;
    }

    public SelectOneMenu getCmbPresentacionEntrada() {
        return cmbPresentacionEntrada;
    }

    public void setCmbPresentacionEntrada(SelectOneMenu cmbPresentacionEntrada) {
        this.cmbPresentacionEntrada = cmbPresentacionEntrada;
    }

    public InputText getTxtContenidoEntrada() {
        return txtContenidoEntrada;
    }

    public void setTxtContenidoEntrada(InputText txtContenidoEntrada) {
        this.txtContenidoEntrada = txtContenidoEntrada;
    }

    public SelectOneMenu getCmbLaboratorio() {
        return cmbLaboratorio;
    }

    public void setCmbLaboratorio(SelectOneMenu cmbLaboratorio) {
        this.cmbLaboratorio = cmbLaboratorio;
    }

    public InputText getTxtLoteEntrada() {
        return txtLoteEntrada;
    }

    public void setTxtLoteEntrada(InputText txtLoteEntrada) {
        this.txtLoteEntrada = txtLoteEntrada;
    }

    public Calendar getTxtFechaVencimiento() {
        return txtFechaVencimiento;
    }

    public void setTxtFechaVencimiento(Calendar txtFechaVencimiento) {
        this.txtFechaVencimiento = txtFechaVencimiento;
    }

    public InputText getTxtUnidades() {
        return txtUnidades;
    }

    public void setTxtUnidades(InputText txtUnidades) {
        this.txtUnidades = txtUnidades;
    }

    public InputText getTxtPrecioTulua() {
        return txtPrecioTulua;
    }

    public void setTxtPrecioTulua(InputText txtPrecioTulua) {
        this.txtPrecioTulua = txtPrecioTulua;
    }

    public InputText getTxtPrecioAsesores() {
        return txtPrecioAsesores;
    }

    public void setTxtPrecioAsesores(InputText txtPrecioAsesores) {
        this.txtPrecioAsesores = txtPrecioAsesores;
    }

    public InputText getTxtPrecioFarmacias() {
        return txtPrecioFarmacias;
    }

    public void setTxtPrecioFarmacias(InputText txtPrecioFarmacias) {
        this.txtPrecioFarmacias = txtPrecioFarmacias;
    }

    public InputText getTxtPrecioClientes() {
        return txtPrecioClientes;
    }

    public void setTxtPrecioClientes(InputText txtPrecioClientes) {
        this.txtPrecioClientes = txtPrecioClientes;
    }

    public InputText getTxtCostoProducto() {
        return txtCostoProducto;
    }

    public void setTxtCostoProducto(InputText txtCostoProducto) {
        this.txtCostoProducto = txtCostoProducto;
    }

    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public List<Entrada> getListaEntrada() {
        if(listaEntrada==null){
            try {
                listaEntrada=entradaLogica.consultarEntradas();
            } catch (Exception ex) {
                Logger.getLogger(EntradaVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listaEntrada;
    }

    public void setListaEntrada(List<Entrada> listaEntrada) {
        this.listaEntrada = listaEntrada;
    }

    public ArrayList<SelectItem> getItemsLaboratorio() {
        if(itemsLaboratorio==null){
            try {
                itemsLaboratorio=new ArrayList<>();
                List<Laboratorio> lista=laboratorioLogica.consultar();
                for (int i = 0; i < lista.size(); i++) {
                    itemsLaboratorio.add(new SelectItem(lista.get(i).getNitlaboratorio(), lista.get(i).getNombrelaboratorio()));
                }
            } catch (Exception ex) {
                Logger.getLogger(EntradaVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return itemsLaboratorio;
    }

    public void setItemsLaboratorio(ArrayList<SelectItem> itemsLaboratorio) {
        this.itemsLaboratorio = itemsLaboratorio;
    }

    public Entrada getSelectedEntrada() {
        return selectedEntrada;
    }

    public void setSelectedEntrada(Entrada selectedEntrada) {
        this.selectedEntrada = selectedEntrada;
    }

    public Long getClaveProducto() {
        return claveProducto;
    }

    public void setClaveProducto(Long claveProducto) {
        this.claveProducto = claveProducto;
    }

    

    

    
    
    
    
    
    public void funcion_limpiar(){
        txtProductoEntrada.setValue("");
        cmbPresentacionEntrada.setValue("");
        txtContenidoEntrada.setValue("");
        cmbLaboratorio.setValue("");
        txtLoteEntrada.setValue("");
        txtFechaVencimiento.setValue("");
        txtUnidades.setValue("");
        txtPrecioTulua.setValue("");
        txtPrecioAsesores.setValue("");
        txtPrecioFarmacias.setValue("");
        txtPrecioClientes.setValue("");
        txtCostoProducto.setValue("");
        
        btnRegistrar.setDisabled(false);
        btnModificar.setDisabled(true);
        btnEliminar.setDisabled(true);
    }
    
    public void funcion_registrar(){
        try {
            Entrada entrada=new Entrada();
            entrada.setNombreentrada(txtProductoEntrada.getValue().toString());
            entrada.setPresentacionentrada(cmbPresentacionEntrada.getValue().toString());
            entrada.setContenidoentrada(txtContenidoEntrada.getValue().toString());
            Laboratorio lab=laboratorioLogica.consultarPorNit(cmbLaboratorio.getValue().toString());
            entrada.setLaboratorioentrada(lab);
            entrada.setLoteentrada(txtLoteEntrada.getValue().toString());
            
            /*String fecha=txtFechaVencimiento.getValue().toString();
            DateFormat df=DateFormat.getDateInstance();
            try{
                Date fechaNueva=df.parse(fecha);
                System.out.println("FECHA NUEVA FECHA "+fechaNueva);
            }catch(ParseException e){
                System.out.println("NO SE PUEDE CONVERTIR "+e);
            }
            System.out.println("FECHA FECHA FECHA "+fecha);*/
            
            entrada.setFechavencimientoentrada(txtFechaVencimiento.getValue().toString());
            entrada.setUnidadeslote(Integer.parseInt(txtUnidades.getValue().toString()));
            entrada.setValorunidadtulua(Integer.parseInt(txtPrecioTulua.getValue().toString()));
            entrada.setValorunidadasesores(Integer.parseInt(txtPrecioAsesores.getValue().toString()));
            entrada.setValorunidadfarmacias(Integer.parseInt(txtPrecioFarmacias.getValue().toString()));
            entrada.setValorunidadclienteesp(Integer.parseInt(txtPrecioClientes.getValue().toString()));
            entrada.setCostorealunidad(Integer.parseInt(txtCostoProducto.getValue().toString()));
            entradaLogica.registrarEntrada(entrada);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "La entrada a bodega se registró con éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
            Logger.getLogger(EntradaVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        funcion_limpiar();
        listaEntrada=null;
    }
    
    public void funcion_modificar(){
        try {
            Entrada entrada=new Entrada();
            entrada.setNombreentrada(txtProductoEntrada.getValue().toString());
            entrada.setPresentacionentrada(cmbPresentacionEntrada.getValue().toString());
            entrada.setContenidoentrada(txtContenidoEntrada.getValue().toString());
            Laboratorio lab=laboratorioLogica.consultarPorNit(cmbLaboratorio.getValue().toString());
            entrada.setLaboratorioentrada(lab);
            entrada.setLoteentrada(txtLoteEntrada.getValue().toString());
            entrada.setFechavencimientoentrada(txtFechaVencimiento.getValue().toString());
            entrada.setUnidadeslote(Integer.parseInt(txtUnidades.getValue().toString()));
            entrada.setValorunidadtulua(Integer.parseInt(txtPrecioTulua.getValue().toString()));
            entrada.setValorunidadasesores(Integer.parseInt(txtPrecioAsesores.getValue().toString()));
            entrada.setValorunidadfarmacias(Integer.parseInt(txtPrecioFarmacias.getValue().toString()));
            entrada.setValorunidadclienteesp(Integer.parseInt(txtPrecioClientes.getValue().toString()));
            entrada.setCostorealunidad(Integer.parseInt(txtCostoProducto.getValue().toString()));
            entradaLogica.modificarEntrada(entrada);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "La entrada a bodega se modificó con éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
            Logger.getLogger(EntradaVista.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void funcion_eliminar(){
        try {
            Entrada entrada=new Entrada();
            entrada.setCodigoentrada(claveProducto);
            entradaLogica.eliminarEntrada(entrada);
            System.out.println("ELIMINAR ELIMINAR ELIMINAR "+entrada);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "El docente se eliminó con éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
            Logger.getLogger(EntradaVista.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void funcion_seleccionar(SelectEvent event){
        Entrada entradaSeleccionada=(Entrada) event.getObject();
        txtProductoEntrada.setValue(entradaSeleccionada.getNombreentrada());
        //cmbPresentacionEntrada.setValue(entradaSeleccionada.getPresentacionentrada());
        txtContenidoEntrada.setValue(entradaSeleccionada.getCodigoentrada());
        //cmbLaboratorio.setValue(entradaSeleccionada.getLaboratorioentrada());
        txtLoteEntrada.setValue(entradaSeleccionada.getLoteentrada());
        txtFechaVencimiento.setValue(entradaSeleccionada.getFechavencimientoentrada());
        txtUnidades.setValue(entradaSeleccionada.getUnidadeslote());
        txtPrecioTulua.setValue(entradaSeleccionada.getValorunidadtulua());
        txtPrecioAsesores.setValue(entradaSeleccionada.getValorunidadasesores());
        txtPrecioFarmacias.setValue(entradaSeleccionada.getValorunidadfarmacias());
        txtPrecioClientes.setValue(entradaSeleccionada.getValorunidadclienteesp());
        txtCostoProducto.setValue(entradaSeleccionada.getCostorealunidad());
        claveProducto=entradaSeleccionada.getCodigoentrada();
        System.out.println("CLAVE CLAVE CLAVE"+claveProducto);
        
        btnRegistrar.setDisabled(true);
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
    }
    
}
